binary search data structures greedy sortings *1700

Please click on ads to support us..

C++ Code:

#include <iostream>
#include <cstdio>
#include <set>

using namespace std;
int n, m, q, len, sum;
set<int> pos;

int main()
{
      cin >> n >> m >> len >> q;
      pos.insert(0);
      pos.insert(n + 1);
      // cantidad de barcos máximos que entran en el tablero
      sum = (n + 1) / (len + 1);

      for (int i = 1; i <= q; ++i)
      {
            int x, l, r;
            cin >> x;
            // Si la bala actual ya existe, continua a la siguiente iteracion
            if (pos.find(x) != pos.end())
                  continue;
            // Se obtiene la posicion de la bala mas cercana por encima de la actual
            auto it = pos.upper_bound(x);
            // Se obtiene la posicion de la bala mas cercana por debajo de la actual
            l = *prev(it);
            r = *it;
            // Restamos a la cantidad de barcos maximos los barcos que entran fuera de los lugares donde cayeron las balas
            sum -= (r - l) / (len + 1);
            // Sumamos la cantidad de barcos que entran en el rango entre la bala minima - actual y bala actual - maxima
            sum += (x - l) / (len + 1) + (r - x) / (len + 1);
            // Insertamos la posicion de la bala actual, se usa set en caso se dispare a la misma posicion varias veces
            pos.insert(x);
            // Si sum es menor que la cantidad de barcos maximos que deberian entrar en el tablero, se hizo trampa
            if (sum < m)
            {
                  cout << i << '\n';
                  return 0;
            }
      }
      // No se hizo trampa
      cout << "-1\n";
      return 0;
}


Comments

Submit
0 Comments
More Questions

1566B - MIN-MEX Cut
678C - Joty and Chocolate
1352E - Special Elements
1520E - Arranging The Sheep
1157E - Minimum Array
1661D - Progressions Covering
262A - Roma and Lucky Numbers
1634B - Fortune Telling
1358A - Park Lighting
253C - Text Editor
365B - The Fibonacci Segment
75A - Life Without Zeros
1519A - Red and Blue Beans
466A - Cheap Travel
659E - New Reform
1385B - Restore the Permutation by Merger
706A - Beru-taxi
686A - Free Ice Cream
1358D - The Best Vacation
1620B - Triangles on a Rectangle
999C - Alphabetic Removals
1634C - OKEA
1368C - Even Picture
1505F - Math
1473A - Replacing Elements
959A - Mahmoud and Ehab and the even-odd game
78B - Easter Eggs
1455B - Jumps
1225C - p-binary
1525D - Armchairs